From 27a60277e8efbfc73a38c3ebc4f117d746d77a3a Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Thu, 24 Jan 2008 14:40:35 +0000 Subject: [PATCH] x86, hvm: MTRR can't cover all the memery ranges MTRR can't cover all the memery ranges, due to guest E820 is changed by CS:16728 with current method. Signed-off-by: Disheng Su --- xen/arch/x86/hvm/mtrr.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/xen/arch/x86/hvm/mtrr.c b/xen/arch/x86/hvm/mtrr.c index cfa8f90389..3bd0dc9d7c 100644 --- a/xen/arch/x86/hvm/mtrr.c +++ b/xen/arch/x86/hvm/mtrr.c @@ -186,7 +186,14 @@ static uint32_t range_to_mtrr(uint32_t reg, struct mtrr_state *m, uint8_t type) { if ( !range_sizek || (reg >= ((m->mtrr_cap & 0xff) - RESERVED_MTRR)) ) + { + gdprintk(XENLOG_WARNING, + "Failed to init var mtrr msr[%d]" + "range_size:%x, total available MSR:%d\n", + reg, range_sizek, + (uint32_t)((m->mtrr_cap & 0xff) - RESERVED_MTRR)); return reg; + } while ( range_sizek ) { @@ -202,7 +209,13 @@ static uint32_t range_to_mtrr(uint32_t reg, struct mtrr_state *m, range_sizek -= sizek; if ( reg >= ((m->mtrr_cap & 0xff) - RESERVED_MTRR) ) + { + gdprintk(XENLOG_WARNING, + "Failed to init var mtrr msr[%d]," + "total available MSR:%d\n", + reg, (uint32_t)((m->mtrr_cap & 0xff) - RESERVED_MTRR)); break; + } } return reg; @@ -253,7 +266,7 @@ static void setup_var_mtrrs(struct vcpu *v) { if ( e820_table[i].addr == 0x100000 ) { - size = e820_table[i].size + 0x100000 + PAGE_SIZE * 3; + size = e820_table[i].size + 0x100000 + PAGE_SIZE * 4; addr = 0; } else -- 2.30.2